package com.atguigu.observer.improve;

import java.util.ArrayList;

/**
 * 具体主题、具体目标类
 * 
 * <pre>
 * 1. 包含最新的天气情况信息 
 * 2. 含有 观察者集合，使用ArrayList管理
 * 3. 当数据有更新时，就主动的调用   ArrayList, 通知所有的（接入方）就看到最新的信息
 * </pre>
 */
public class SubjectForWeather implements Subject {

	private float temperatrue;
	private float pressure;
	private float humidity;

	/** 观察者集合 */
	private ArrayList<Observer> observerList;

	public SubjectForWeather() {
		observerList = new ArrayList<Observer>();
	}

	// 当数据有更新时，就调用 setData
	public void setData(float temperature, float pressure, float humidity) {
		this.temperatrue = temperature;
		this.pressure = pressure;
		this.humidity = humidity;

		// 将最新的信息 推送给 接入方 currentConditions
		notifyObservers();
	}

	// 添加一个观察者
	@Override
	public void registerObserver(Observer o) {
		observerList.add(o);
	}

	// 移除一个观察者
	@Override
	public void removeObserver(Observer o) {
		if (observerList.contains(o)) {
			observerList.remove(o);
		}
	}

	// 遍历所有的观察者，并通知
	@Override
	public void notifyObservers() {
		for (int i = 0; i < observerList.size(); i++) {
			observerList.get(i).update(this.temperatrue, this.pressure, this.humidity);
		}
	}
}
